fun main() {
    val eagle = Bird("老鹰", BehaviorFly())
    println("这是一只${eagle.name},${eagle.fly()},${eagle.swim()},${eagle.run()}")
}

//使用接口代理,可以把接口实现作为参数写在构造函数中,实现接口时使用by关键字进行引用
class Bird(val name: String, behavior: Behavior) : Behavior by behavior {

}

//抽象鸟类的行为属性
interface Behavior {
    //接口内方法,默认是抽象的
    fun fly(): String
    fun swim(): String

    //kotlin中接口方法可以有默认的实现
    fun run(): String {
        return "大多数鸟类不擅长跑"
    }
}

//定义接口代理,即某一个类别的鸟类的实现类,这里定义会飞的鸟类
class BehaviorFly : Behavior {
    override fun fly(): String {
        return "擅长飞翔"
    }

    override fun swim(): String {
        return "个别水鸟会浮水"
    }

    override fun run(): String {
        return "不擅长跑"
    }
}